Racket Procedures
apply
语法:
(apply proc v ... lst #:<kw> kw-arg ...) → any
proc : procedure?
v : any/c
lst : list?
kw-arg : any/c
使用 (list* v ... lst)
的内容作为 (by-position)
参数来应用 proc
。
#:<kw> kw-arg
序列也作为关键字参数提供给 proc
,其中 #:<kw>
代表任何关键字。
进行方法调用的方式:
> (apply + '(1 2 3))
6
> (apply + 1 2 '(3))
6
> (apply + '())
0
> (apply sort (list (list '(2) '(1)) <) #:key car)
'((1) (2))
其中:
(list (list '(2) '(1)) <)
是一个列表- 第一个元素是
(list '(2) '(1))
- 第二个元素是
- 第一个元素是
- 将这个列表传入 sort,即对
(list '(2) '(1))
应用<
进行排序- sort 会解析第一个 list,两个参数分别是
'(2)
和'(1)
,尽管都只有一个元素,但这是两个列表 - 这时使用了
#:key car
传入 sort,告诉 sort 取列表的首个元素参与大小对比 - 最终得到结果
'((1) (2))
- sort 会解析第一个 list,两个参数分别是
compose
compose 能够将传入的多个函数形成函数链(输入输出要能兼容)。
> ((compose1 - sqrt add1) 8)
-3
> ((compose1 add1 sqrt -) 8)
1.0+2.8284271247461903i
compose1 是只接收 1 个参数的特殊版本。
调用顺序是:右边的先调,左边的后调。